FROM golang:1.23.0-alpine AS builder

# 安装git和其他必要工具
RUN apk add --no-cache git

# 设置工作目录
WORKDIR /app

# 复制依赖文件（注意：上下文已经是项目根目录，所以用./）
COPY ./go.mod ./go.sum ./

# 下载依赖
RUN go mod tidy

# 安装Swaggo工具（使用go.mod中指定的版本）
RUN go install github.com/swaggo/swag/cmd/swag@v1.8.12

# 复制源代码
COPY . .

# 生成Swagger文档
RUN swag init --parseDependency --parseInternal --g ./controller/user_controller.go

# 构建Go应用 - 静态链接，无需依赖系统库
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

# 第二阶段：创建最终镜像
FROM alpine:latest

# 设置时区
RUN apk add --no-cache tzdata
ENV TZ=Asia/Shanghai

# 创建非root用户
RUN addgroup -g 1001 -S appgroup && adduser -S appuser -u 1001 -G appgroup

# 设置工作目录
WORKDIR /app

# 从构建阶段复制二进制文件
COPY --from=builder /app/main /app/main

# 复制静态文件和模板
COPY --from=builder /app/web /app/web
COPY --from=builder /app/templates /app/templates
# 复制Swagger文档
COPY --from=builder /app/docs /app/docs

# 设置文件所有者
RUN chown -R appuser:appgroup /app

# 切换到非root用户
USER appuser

# 暴露端口
EXPOSE 9080

# 运行应用
CMD ["/app/main"]
